#include <stdio.h>
#include "inc\Point.h"

/* ----------------------------------------------------------------------------------------------- *
 *	POINT : реализация методов
 */

static void * Point_ctor(void * _pSelf, va_list * ppArgs)
{
	POINT * pSelf = _pSelf;
	pSelf->x = va_arg( *ppArgs, int );
	pSelf->y = va_arg( *ppArgs, int );
	return pSelf;
}

static void Point_draw(const void * _pSelf)
{
	const POINT * pSelf = _pSelf;
	printf("\".\" at %d,%d\n", pSelf->x, pSelf->y);
}

/* ----------------------------------------------------------------------------------------------- *
 *	ручная инициализация структур с мета-информацией об POINT
 */

static const CLASS point_class_info =
{
	sizeof(POINT), // размер типа в байтах

	Point_ctor, // конструктор
	0,          // деструктор
	Point_draw  // рисование
};

/* ----------------------------------------------------------------------------------------------- *
 *	инициализация "красивых" констант-указателей на мета-информацию о POINT
 */

const void * Point = &point_class_info;

void move(void * _pSelf, int dx, int dy)
{
	POINT * pSelf = _pSelf;
	pSelf->x += dx;
	pSelf->y += dy;
}

